package com.dgut.chat._2025._2._6_图书购物管理系统的设计与实现;

import com.dgut.chat.doc.DbVo;
import com.dgut.chat.doc.UmlEntityVo;
import com.dgut.chat.utils.ChatAppUtils;
import com.dgut.graduation.graduation_code_build.utils.UMLGeneratorUtil;
import com.google.common.collect.Lists;

import java.util.List;

/**
 * @author xiaozheng
 * @version 1.0
 * @date 2024/12/30 23:06
 */
public class _6_图书购物管理系统的设计与实现 {
	public static List<String> technologyList = Lists.newArrayList("BS", "SpringBoot", "Mybatis", "MYSQL", "Maven");
	public static Integer fileNumber = 2;
	public static String baseDir = System.getProperty("user.dir") +
		"\\src\\main\\resources\\2025\\"+fileNumber+"\\";
	public static Integer tableNumber = 9;
	public static Boolean addCreateFlag = false;
	public static String fileName = "_6_图书购物管理系统的设计与实现";
	public static String outputAddress = baseDir + "output\\" + fileName + "\\";
	public static String inputAddress = baseDir + "input\\" + fileName + "\\";
	public static String getGraduationIndex = "2025\\"+fileNumber+"\\input\\" + fileName + "\\" + fileName + "_index.txt";
	public static String role = "管理员";
	public static String umlCode = "@startuml\n" + "left to right direction\n"
		+ "${role} -- (登录管理)\n"
		+ "(登录管理) --|> (登录):<<extend>>\n"
		+ "${role} -- (图书分类管理)\n"
		+ "(图书分类管理) --|> (维护图书分类列表):<<extend>>\n"
		+ "(图书分类管理) --|> (删除图书分类):<<extend>>\n"
		+ "${role} -- (图书管理)\n"
		+ "(图书管理) --|> (维护图书基本信息):<<extend>>\n"
		+ "(图书管理) --|> (下架图书):<<extend>>\n"
		+ "${role} -- (热销管理)\n"
		+ "(热销管理) --|> (热销推荐):<<extend>>\n"
		+ "(热销管理) --|> (新品推荐):<<extend>>\n"
		+ "${role} -- (订单管理)\n"
		+ "(订单管理) --|> (发货处理):<<extend>>\n"
		+ "(订单管理) --|> (取消订单):<<extend>>\n"
		+ "(订单管理) --|> (查看订单想用):<<extend>>\n"
		+ "${role} -- (用户管理)\n"
		+ "(用户管理) --|> (维护用户列表):<<extend>>\n"
		+ "(用户管理) --|> (修改密码):<<extend>>\n"
		+ "@enduml";
	public static String world = "${role}用例图";

	public static String role2 = "用户";
	public static String umlCode2 = "@startuml\n" + "left to right direction\n"
		+ "${role2} -- (登录注册管理)\n"
		+ "(登录注册管理) --|> (登录):<<extend>>\n"
		+ "(登录注册管理) --|> (注册):<<extend>>\n"
		+ "${role2} -- (图书管理)\n"
		+ "(图书管理) --|> (检索图书信息):<<extend>>\n"
		+ "(图书管理) --|> (查看图书详情):<<extend>>\n"
		+ "${role2} -- (购物车管理)\n"
		+ "(购物车管理) --|> (添加修改购物车):<<extend>>\n"
		+ "(购物车管理) --|> (移除购物车):<<extend>>\n"
		+ "${role2} -- (订单管理)\n"
		+ "(订单管理) --|> (创建订单):<<extend>>\n"
		+ "(订单管理) --|> (订单列表):<<extend>>\n"
		+ "(订单管理) --|> (订单收货):<<extend>>\n"
		+ "${role2} -- (个人信息管理)\n"
		+ "(个人信息管理) --|> (修改基本信息):<<extend>>\n"
		+ "(个人信息管理) --|> (修改密码):<<extend>>\n"
		+ "@enduml";
	public static String world2 = "${role2}用例图";

	public static String role3 = "空";
	public static String umlCode3 = "@startuml\n" + "left to right direction\n"
		+ "${role2} -- (登录注册管理)\n"
		+ "(登录注册管理) --|> (登录):<<extend>>\n"
		+ "(登录注册管理) --|> (注册):<<extend>>\n"
		+ "${role2} -- (器材管理)\n"
		+ "(器材管理) --|> (检索器材列表):<<extend>>\n"
		+ "(器材管理) --|> (查看器材详情):<<extend>>\n"
		+ "${role2} -- (器材借出和归还管理)\n"
		+ "(器材借出和归还管理) --|> (借出器材):<<extend>>\n"
		+ "(器材借出和归还管理) --|> (归还器材):<<extend>>\n"
		+ "${role2} -- (进入离开登记管理)\n"
		+ "(进入离开登记管理) --|> (入馆登记):<<extend>>\n"
		+ "(进入离开登记管理) --|> (离馆登记):<<extend>>\n"
		+ "${role2} -- (体育论坛管理)\n"
		+ "(体育论坛管理) --|> (发布帖子):<<extend>>\n"
		+ "(体育论坛管理) --|> (帖子评论):<<extend>>\n"
		+ "${role2} -- (体育资讯管理)\n"
		+ "(体育资讯管理) --|> (查看资讯详情):<<extend>>\n"
		+ "${role2} -- (个人信息管理)\n"
		+ "(个人信息管理) --|> (修改基本信息):<<extend>>\n"
		+ "(个人信息管理) --|> (修改密码):<<extend>>\n"
		+ "@enduml";
	public static String world3 = "${role2}用例图";


	public static List<UmlEntityVo> getUmlEntityVoList() {
		List<UmlEntityVo> result = Lists.newArrayList();

		StringBuilder sb = new StringBuilder();
		sb.append(getWorld()).append("\n").append(getUmlCode()).append("\n");
		String subIndexData = "图3-1${role}用例图";
		String subIndexDataReplace = subIndexData.replaceAll("\\$\\{role\\}", role);
		UmlEntityVo umlEntityVo = UmlEntityVo.builder().profix(sb.toString()).url(getOutputAddress()).subIndex(subIndexDataReplace).build();
		result.add(umlEntityVo);
		if (!role2.equals("空")) {
			StringBuilder sb2 = new StringBuilder();
			sb2.append(getWorld2()).append("\n").append(getUmlCode2()).append("\n");
			String subIndexData2 = "图3-2${role}用例图";
			String subIndexDataReplace2 = subIndexData2.replaceAll("\\$\\{role\\}", role2);
			UmlEntityVo umlEntityVo2 = UmlEntityVo.builder().profix(sb2.toString()).url(getOutputAddress2()).subIndex(subIndexDataReplace2).build();
			result.add(umlEntityVo2);
		}

		if (!role3.equals("空")) {
			StringBuilder sb3 = new StringBuilder();
			sb3.append(getWorld3()).append("\n").append(getUmlCode3()).append("\n");
			String subIndexData3 = "图3-3${role}用例图";
			String subIndexDataReplace3 = subIndexData3.replaceAll("\\$\\{role\\}", role3);
			UmlEntityVo umlEntityVo3 = UmlEntityVo.builder().profix(sb3.toString()).url(getOutputAddress3()).subIndex(subIndexDataReplace3).build();
			result.add(umlEntityVo3);
		}
		return result;
	}


	public static String getUmlCode() {
		return umlCode.replaceAll("\\$\\{role\\}", role);
	}

	public static String getUmlCode2() {
		return umlCode2.replaceAll("\\$\\{role2\\}", role2);
	}

	public static String getUmlCode3() {
		return umlCode3.replaceAll("\\$\\{role3\\}", role3);
	}

	public static String getWorld() {
		return world.replaceAll("\\$\\{role\\}", role);
	}

	public static String getWorld2() {
		return world2.replaceAll("\\$\\{role2\\}", role2);
	}

	public static String getWorld3() {
		return world3.replaceAll("\\$\\{role2\\}", role3);
	}

	public static String getOutputAddress() {
		return outputAddress + getWorld() + "index.png";
	}

	public static String getOutputAddress2() {
		return outputAddress + getWorld2() + "index.png";
	}

	public static String getOutputAddress3() {
		return outputAddress + getWorld3() + "index.png";
	}

	public static String getRole() {
		return role;
	}

	public static String getRole2() {
		return role2;
	}

	public static String getRole3() {
		return role3;
	}

	public static String getIndexUrl() {
		return outputAddress + "index.png";
	}

	public static String getErUrl() {
		return outputAddress + "er.png";
	}

	public static String getOutputFileUrl() {
	    return outputAddress + fileName + ".doc";
    }


	public static void main(String[] args) {
		run();
	}

	public static void run() {
		UMLGeneratorUtil.generateUMLImage(getUmlCode(), getOutputAddress());
		if (!role2.equals("空")) {
			UMLGeneratorUtil.generateUMLImage(getUmlCode2(), getOutputAddress2());
		}
		if (!role3.equals("空")) {
			UMLGeneratorUtil.generateUMLImage(getUmlCode3(), getOutputAddress3());
		}
	}


	public static DbVo buildTableFieldVoList() {
		return ChatAppUtils.buildTableFieldVoList(inputAddress, fileName + "_db.txt", tableNumber, addCreateFlag
		);
	}

	public static String getGraduationIndex() {
		return getGraduationIndex;
	}

	public static List<String> getTechnologyList() {
		return technologyList;
	}
}
